package bitclub;

import herramientas.BitUtil;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import persistencia.PVideojuego;

/**
 * @author BIT COMPANY
 */
public class Videojuego extends Articulo {

    private String plataforma;
    private String productora;

    public Videojuego(int id, String titulo, String genero, int ano, int clasificacionEdad, boolean activo, Date fechaAlta, Date fechaBaja, Proveedor proveedor, Tarifa tarifa, int vecesAlquilada, boolean disponible, String plataforma, String productora) {
        super(id, titulo, genero, ano, clasificacionEdad, activo, fechaAlta, fechaBaja, proveedor, tarifa, vecesAlquilada, disponible);
        this.plataforma = plataforma;
        this.productora = productora;
    }

    public Videojuego(String titulo, String genero, int ano, int clasificacionEdad, boolean activo, Date fechaAlta, Date fechaBaja, Proveedor proveedor, Tarifa tarifa, int vecesAlquilada, boolean disponible, String plataforma, String productora) {
        this(-1, titulo, genero, ano, clasificacionEdad, activo, fechaAlta, fechaBaja, proveedor, tarifa, vecesAlquilada, disponible, plataforma, productora);
    }

    public Videojuego() {
        super();
    }

    public String getPlataforma() {
        return plataforma;
    }

    public void setPlataforma(String plataforma) {
        this.plataforma = plataforma;
    }

    public String getProductora() {
        return productora;
    }

    public void setProductora(String productora) {
        this.productora = productora;
    }

    @Override
    public String toString() {
        //En esta variable vamos a concatenar todos los atributos de nuestro Videojuego
        String resultado = "";

        resultado += "VIDEOJUEGO______________________________________________________\n";
        //Si acabamos de crear el videojuego podemos mostrarlo para confirmarlo, entonces el id será -1
        if (this.getId() == -1) {
            resultado += "              " + this.getTitulo().toUpperCase() + ",  (" + this.getAno() + ")\n";
        } else {
            resultado += "              [Cod." + this.getId() + "]  " + this.getTitulo().toUpperCase() + ",  (" + this.getAno() + ")\n";
        }
        resultado += "________________________________________________________________\n";

        resultado += "Genero:       " + this.getGenero() + "\n";
        resultado += "Plataforma:   " + this.getPlataforma() + "\n";
        resultado += "Productora:   " + this.getProductora() + "\n";
        if (this.getClasificacionEdad() == 0) {
            resultado += "Class.Edad:   Todos los publicos\n";
        } else {
            resultado += "Class.Edad:   " + this.getClasificacionEdad() + " años\n";
        }
        resultado += "Fecha Alta:   " + BitUtil.muestraFecha(this.getFechaAlta()) + "\n";
        if (this.getProveedor() != null) {
            resultado += "Proveedor:    " + this.getProveedor().getNombre() + ", " + this.getProveedor().getApellidos()
                    + "  [" + this.getProveedor().getNombredeEmpresa() + "] \n";
        }
        resultado += "________________________________________________________________\n";

        resultado += "Tarifa:       " + this.getTarifa().getNombre() + "\n";
        resultado += "              " + this.getTarifa().getPrecio() + " durante " + this.getTarifa().getNumDias() + " dias.\n";
        resultado += "              Hay un recargo de " + this.getTarifa().getRecargo() + " por día adicional.\n";
        resultado += "________________________________________________________________\n";

        if (this.getFechaBaja() != null && this.isActivo() == false) {
            resultado += "Fecha Baja:   " + BitUtil.muestraFecha(this.getFechaBaja()) + "\n";
        }
        resultado += "Alquileres:   " + this.getVecesAlquilada() + "       ";

        if (this.isDisponible()) {
            resultado += "              (EL VIDEOJUEGO ESTÁ DISPONIBLE) \n";
        } else {
            resultado += "              (NO DISPONIBLE) \n";
        }

        resultado += "\n\n";
        return resultado;
    }

    public String toStringLinea() {
        String resultado = "";
        resultado += "________________________________________________________________\n";
        resultado += "   [Cod." + this.getId() + "]  " + this.getTitulo().toUpperCase() + ",  (" + this.getAno() + ")\n";
        resultado += "________________________________________________________________\n";
        return resultado;
    }

    /**
     * Crea un nuevo registro en BD con el objeto Articulo que lo usa
     */
    @Override
    public void nuevo() {
        PVideojuego.nuevoBD(this);
    }

    /**
     * Actualiza los datos en la base de datos del objeto que lo usa
     */
    @Override
    public void actualizar() {
        PVideojuego.actualizarBD(this);
    }

    /**
     * Devuelve la lista de Videojuegos más Alquilados
     */
    public static List<Videojuego> seleccionarPorMasAlquilados(int cantidad) {
        List<Videojuego> listVideojuego = new ArrayList();
        //Pedimos los artículos más alquilados a la capa de persistencia
        listVideojuego = PVideojuego.seleccionarPorMasAlquiladosBD(cantidad);
        return listVideojuego;
    }

    /**
     * Devuelve la lista de Videojuegos menos Alquilados
     */
    public static List<Videojuego> seleccionarPorMenosAlquilados(int cantidad) {
        List<Videojuego> listVideojuego = new ArrayList();
        //Pedimos los artículos más alquilados a la capa de persistencia
        listVideojuego = PVideojuego.seleccionarPorMenosAlquiladosBD(cantidad);
        return listVideojuego;
    }

    /**
     * Devuelve una lista de Videojuegos cuyo ID coincida con el introducido por teclado.
     */
    public static Videojuego seleccionarPorCodigo(int codigo, boolean soloDisponible) {
        Videojuego videojuego;
        //Pedimos la película que tenga el código solicitado
        videojuego = PVideojuego.seleccionarPorCodigoBD(codigo, soloDisponible);
        return videojuego;
    }

    /**
     * Devuelve la lista de Videojuegos cuyo nombre contenga la palabra introducida por teclado
     */
    public static List<Videojuego> seleccionarPorTitulo(String titulo, boolean soloDisponible) {
        List<Videojuego> listVideojuego = new ArrayList();
        //Pedimos los artículos que tengan cierta palabra en el título
        listVideojuego = PVideojuego.seleccionarPorTituloBD(titulo, soloDisponible);
        return listVideojuego;
    }

    /**
     * Devuelve la lista de Videojuegos cuyo genero coincide con el introducido por teclado
     */
    public static List<Videojuego> seleccionarPorGenero(String genero, boolean soloDisponible) {
        List<Videojuego> listVideojuego = new ArrayList();
        //Pedimos los artículos que pertenezcan a cierto género
        listVideojuego = PVideojuego.seleccionarPorGeneroBD(genero, soloDisponible);
        return listVideojuego;
    }

    /**
     * Devuelve la lista de Videojuegos cuyo año coincide con el introducido por teclado
     */
    public static List<Videojuego> seleccionarPorAno(String ano, boolean soloDisponible) {
        List<Videojuego> listVideojuego = new ArrayList();
        //Pedimos los artículos que pertenezcan a cierto año
        listVideojuego = PVideojuego.seleccionarPorAnoBD(ano, soloDisponible);
        return listVideojuego;
    }
}
